package com.lzt.handler.exception;

import cn.dev33.satoken.exception.NotLoginException;
import com.lzt.domain.ResponseResult;
import com.lzt.enums.AppHttpCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

//    @ExceptionHandler(RuntimeException.class)
//    public ResponseResult ex(RuntimeException nle) throws Exception{
//        String a=nle.getMessage();
//        return  ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_ERROR);
//    }

@ExceptionHandler(SystemException.class)
public ResponseResult systemExceptionHandler(SystemException e){

    //打印异常信息，方便我们追溯问题的原因。{}是占位符，具体值由e决定
    log.error("出现了异常! {}",e);

    //从异常对象中获取提示信息封装，然后返回。ResponseResult是我们写的类
    return ResponseResult.errorResult(e.getCode(),e.getMsg());
}

    //其它异常交给这里处理
    @ExceptionHandler(Exception.class)
    public ResponseResult exceptionHandler(Exception e){

        //打印异常信息，方便我们追溯问题的原因。{}是占位符，具体值由e决定
        log.error("出现了异常! {}",e);

        //从异常对象中获取提示信息封装，然后返回。ResponseResult、AppHttpCodeEnum是我们写的类
        return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(),e.getMessage());//枚举值是500
    }

    // 全局异常拦截（拦截项目中的NotLoginException异常）
    @ExceptionHandler(NotLoginException.class)
    public ResponseResult handlerNotLoginException(NotLoginException nle)
            throws Exception {

        // 打印堆栈，以供调试
        nle.printStackTrace();

        // 判断场景值，定制化异常信息
        String message = "";
//        ResponseResult result= ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
        if(nle.getType().equals(NotLoginException.NOT_TOKEN)) {

//            WebUtils.renderString(response, JSON.toJSONString(result));

//            message = "未能读取到有效 token";
        }
        else if(nle.getType().equals(NotLoginException.INVALID_TOKEN)) {
            message = "token 无效";
        }
        else if(nle.getType().equals(NotLoginException.TOKEN_TIMEOUT)) {
            message = "token 已过期";
        }
        else if(nle.getType().equals(NotLoginException.BE_REPLACED)) {
            message = "token 已被顶下线";
        }
        else if(nle.getType().equals(NotLoginException.KICK_OUT)) {
            message = "token 已被踢下线";
        }
        else if(nle.getType().equals(NotLoginException.TOKEN_FREEZE)) {
            message = "token 已被冻结";
        }
        else if(nle.getType().equals(NotLoginException.NO_PREFIX)) {
            message = "未按照指定前缀提交 token";
        }
        else {
            message = "当前会话未登录";
        }
        return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
        // 返回给前端
//        return SaResult.error(message);
    }

}
